package com.tsyz.servlet.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.validation.Validator;

/**
 * 验证器工具类，提供Spring管理的Validator实例
 * 利用Spring Boot Validation Starter自动配置的验证器
 *
 * @author ext.zhaoke14
 */
@Slf4j
@Component
public class ValidationUtil {

    private static Validator validator;

    /**
     * 通过构造函数注入Spring管理的Validator实例
     *
     * @param validator Spring Boot自动配置的验证器实例
     */
    @Autowired
    public ValidationUtil(Validator validator) {
        ValidationUtil.validator = validator;
        log.debug("ValidationUtil 初始化完成，Validator实例已注入");
    }

    /**
     * 私有构造方法，防止工具类被直接实例化
     */
    private ValidationUtil() {
        throw new AssertionError("工具类不允许实例化，请通过Spring容器获取实例");
    }

    /**
     * 获取Spring管理的Validator实例
     *
     * @return 全局唯一的Validator实例
     * @throws IllegalStateException 当Spring容器未启动或验证器未正确注入时抛出
     */
    public static Validator getValidator() {
        if (validator == null) {
            log.error("ValidationUtil 未正确初始化，请确保Spring容器已启动且ValidationUtil已被正确注入");
            throw new IllegalStateException("ValidationUtil 未正确初始化，请确保Spring容器已启动且ValidationUtil已被正确注入");
        }
        return validator;
    }
}
